package UserServices;

import ModeloDominio.*;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.UserTransaction;

public class Cheque {

    @PersistenceContext
    private EntityManager em;
    /**
     * <p>The transaction resource.</p>
     */
    @Resource
    private UserTransaction utx;
    private String numero;
    private String codigo;
    private String nif;
    private String info;
    private String nomeut;
    private String nomemed;
    private String dia;
    private String mes;
    private String ano;
    private String anofim;
    private String string;
    private String tipo;
    private tabela[] tab;
    private String pag_ch_ars;

    public String getPag_ch_ars() {
        return pag_ch_ars;
    }

    public void setPag_ch_ars(String pag_ch_ars) {
        this.pag_ch_ars = pag_ch_ars;
    }

    public tabela[] getTab() {
        return tab;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public String getString() {
        return string;
    }

    public void setString(String string) {
        this.string = string;
    }

    public String getCodigo() {
        return codigo;
    }

    public void setCodigo(String codigo) {
        this.codigo = codigo;
    }

    public String getNumero() {
        return numero;
    }

    public void setNumero(String numero) {
        this.numero = numero;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public String getNif() {
        return nif;
    }

    public void setNif(String nif) {
        this.nif = nif;
    }

    public String getAno() {
        return ano;
    }

    public void setAno(String ano) {
        this.ano = ano;
    }

    public String getAnofim() {
        return anofim;
    }

    public void setAnofim(String anofim) {
        this.anofim = anofim;
    }

    public String getDia() {
        return dia;
    }

    public void setDia(String dia) {
        this.dia = dia;
    }

    public EntityManager getEm() {
        return em;
    }

    public void setEm(EntityManager em) {
        this.em = em;
    }

    public String getMes() {
        return mes;
    }

    public void setMes(String mes) {
        this.mes = mes;
    }

    public String getNomemed() {
        return nomemed;
    }

    public void setNomemed(String nomemed) {
        this.nomemed = nomemed;
    }

    public String getNomeut() {
        return nomeut;
    }

    public void setNomeut(String nomeut) {
        this.nomeut = nomeut;
    }

    public UserTransaction getUtx() {
        return utx;
    }

    public void setUtx(UserTransaction utx) {
        this.utx = utx;
    }

    public String Registo() {
        String myParam = "" + FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("myAttribute");
        int id_c;

        // obter numero de cheques do utente criados
        List cats = null;
        tab=null;
        try {
            utx.begin();
            javax.persistence.Query q = em.createQuery("SELECT L.nCheques FROM Utente L WHERE L.nif='" + nif + "'");
            cats = q.getResultList();
            utx.commit();
        } catch (Exception ex) {
            Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
        }

        // ver se a lista nao esta vazia
        if (cats.size() == 0) {
            FacesContext context = FacesContext.getCurrentInstance();
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "The nif specified is not correct.",
                    "Cheque Failed!");
            context.addMessage(null, message);
        } else {
            // ver se o numero de cheques é igual a zero
            if (cats.get(0).toString().compareTo("0") == 0) {
                ChequeDentista cheque = new ChequeDentista();
                Date data = new Date();
                data.getDate();
                // obter o id do utente
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM Utente L WHERE L.nif='" + nif + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }

                id_c = Integer.parseInt(cats.get(0).toString());
                cheque.setDataEmissao(data);
                cheque.setIdutente(Integer.parseInt(cats.get(0).toString()));
                // obter o nome do utente
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.nome FROM Utente L WHERE L.nif='" + nif + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }

                nomeut = cats.get(0).toString();
                // obter o id do loggin do medico
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM Logging L WHERE L.username='" + myParam + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                // obter o id do medico
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM Medico L WHERE L.idlog='" + cats.get(0).toString() + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                cheque.setIdmedico(Integer.parseInt(cats.get(0).toString()));
                // obter o nome do medico
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.nome FROM Medico L WHERE L.id='" + cats.get(0).toString() + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                nomemed = cats.get(0).toString();
                cheque.setEstadoMedico("PENDENTE");
                cheque.setEstadoUtente("CRIADO");
                //criar codigo
                int temp = (int) (5 * Math.random());
                if (temp == 0) {
                    codigo = "cpty2";
                } else if (temp == 1) {
                    codigo = "codigo";
                } else if (temp == 2) {
                    codigo = "xp1g2";
                } else if (temp == 3) {
                    codigo = "giu3sd";
                } else if (temp == 4) {
                    codigo = "sdl2sa";
                } else {
                    codigo = "pwq2w";
                }
                int temp2 = (int) (1000 * Math.random());
                codigo = codigo + temp2;
                cheque.setCodSeg(codigo);
                // obter numero de cheque
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM ChequeDentista L");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (cats.size() == 0) {
                    numero = "1";
                } else {
                    numero = String.valueOf(cats.size() + 1);
                }
                cheque.setNumero(Integer.parseInt(numero));

                cheque.setInfo(info);

                // fazer update no numero de cheques criados para o utente
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("UPDATE Utente U SET U.nCheques=1 WHERE U.id=" + id_c);
                    q.executeUpdate();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }


                // inserir o cheque na base de dados
                try {
                    utx.begin();
                    em.persist(cheque);
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }

                dia = String.valueOf(data.getDay());
                mes = String.valueOf(data.getMonth());
                ano = String.valueOf(data.getYear());
                anofim = String.valueOf(data.getYear() + 1);

            } else {
                FacesContext context = FacesContext.getCurrentInstance();
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "O primeiro cheque ja foi criado.",
                        "Cheque Failed!");
                context.addMessage(null, message);
            }
        }
        return null;
    }

    public String RegistoMD() {
        String myParam = "" + FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("myAttribute");
        int id_c;

        // obter numero de cheques do utente criados
        List cats = null;
        tab=null;
        try {
            utx.begin();
            javax.persistence.Query q = em.createQuery("SELECT L.nCheques FROM Utente L WHERE L.nif='" + nif + "'");
            cats = q.getResultList();
            utx.commit();
        } catch (Exception ex) {
            Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
        }

        // ver se a lista nao esta vazia
        if (cats.size() == 0) {
            FacesContext context = FacesContext.getCurrentInstance();
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Cheque Failed!",
                    "The nif specified is not correct.");
            context.addMessage(null, message);
        } else {
            // ver se o numero de cheques é deferente de 0
            if ((Integer.parseInt(cats.get(0).toString()) > 0) && (Integer.parseInt(cats.get(0).toString()) < 3)) {
                ChequeDentista cheque = new ChequeDentista();
                Date data = new Date();
                data.getDate();

                // obter o id do utente
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM Utente L WHERE L.nif='" + nif + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                id_c = Integer.parseInt(cats.get(0).toString());
                cheque.setDataEmissao(data);
                cheque.setIdutente(Integer.parseInt(cats.get(0).toString()));
                // obter o nome do utente
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.nome FROM Utente L WHERE L.nif='" + nif + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }

                nomeut = cats.get(0).toString();
                // obter o id do loggin do medico
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM Logging L WHERE L.username='" + myParam + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                // obter o id do medico
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM Medico L WHERE L.idlog='" + cats.get(0).toString() + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                cheque.setIdmedico(Integer.parseInt(cats.get(0).toString()));
                // obter o nome do medico
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.nome FROM Medico L WHERE L.id='" + cats.get(0).toString() + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                nomemed = cats.get(0).toString();
                cheque.setEstadoMedico("PENDENTE");
                cheque.setEstadoUtente("CRIADO");
                //criar codigo
                int temp = (int) (5 * Math.random());
                if (temp == 0) {
                    codigo = "cpty2";
                } else if (temp == 1) {
                    codigo = "codigo";
                } else if (temp == 2) {
                    codigo = "xp1g2";
                } else if (temp == 3) {
                    codigo = "giu3sd";
                } else if (temp == 4) {
                    codigo = "sdl2sa";
                } else {
                    codigo = "pwq2w";
                }
                int temp2 = (int) (1000 * Math.random());
                codigo = codigo + temp2;
                cheque.setCodSeg(codigo);
                // obter numero de cheque
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM ChequeDentista L");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                if (cats.size() == 0) {
                    numero = "1";
                } else {
                    numero = String.valueOf(cats.size() + 1);
                }
                cheque.setNumero(Integer.parseInt(numero));
                cheque.setInfo(info);




                // fazer update no numero de cheques criados para o utente
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("UPDATE Utente U SET U.nCheques=U.nCheques+1 WHERE U.id=" + id_c);
                    q.executeUpdate();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }



                // inserir o cheque na base de dados
                try {
                    utx.begin();
                    em.persist(cheque);
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }
                dia = String.valueOf(data.getDay());
                mes = String.valueOf(data.getMonth());
                ano = String.valueOf(data.getYear());
                anofim = String.valueOf(data.getYear() + 1);

            } else {
                FacesContext context = FacesContext.getCurrentInstance();
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Cheque Failed!",
                        "U cannot insert the first cheque in the database.");
                context.addMessage(null, message);
            }
        }
        return null;
    }

    public String Utilizar() {
        String myParam = "" + FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("myAttribute");

        List cats = null;
        tab=null;
        // Obter estado do cheque
        try {
            utx.begin();
            javax.persistence.Query q = em.createQuery("SELECT L.estadoUtente FROM ChequeDentista L WHERE L.numero=" + numero + " and L.codSeg='" + codigo + "'");
            cats = q.getResultList();
            utx.commit();
        } catch (Exception ex) {
            Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
        }
        // ver se valores estao correctos
        if (cats.size() != 0) {
            // ver se o cheque pode ser usado
            if (cats.get(0).toString().compareTo("CRIADO") == 0) {
                // obter id do cheque
                try {
                    utx.begin();
                    javax.persistence.Query q = em.createQuery("SELECT L.id FROM ChequeDentista L WHERE L.numero=" + numero + " and L.codSeg='" + codigo + "'");
                    cats = q.getResultList();
                    utx.commit();
                } catch (Exception ex) {
                    Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                }

                if (cats.size() == 0) {
                    FacesContext context = FacesContext.getCurrentInstance();
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                            "Cheque Failed!",
                            "The specified CODE or NUMERO of cheque is not correct.");
                    context.addMessage(null, message);
                } else {
                    int temp = Integer.parseInt(cats.get(0).toString());
                    // fazer update ao estado do cheque dentista
                    try {
                        utx.begin();
                        javax.persistence.Query q = em.createQuery("UPDATE ChequeDentista U SET U.estadoUtente='PENDENTE' WHERE U.id=" + Integer.parseInt(cats.get(0).toString()));
                        q.executeUpdate();
                        utx.commit();
                    } catch (Exception ex) {
                        Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    // obter o id do loggin do medico
                    try {
                        utx.begin();
                        javax.persistence.Query q = em.createQuery("SELECT L.id FROM Logging L WHERE L.username='" + myParam + "'");
                        cats = q.getResultList();
                        utx.commit();
                    } catch (Exception ex) {
                        Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    // obter o id do medico
                    try {
                        utx.begin();
                        javax.persistence.Query q = em.createQuery("SELECT L.id FROM Medico L WHERE L.idlog='" + cats.get(0).toString() + "'");
                        cats = q.getResultList();
                        utx.commit();
                    } catch (Exception ex) {
                        Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    // fazer update ao medico_p do cheque dentista
                    try {
                        utx.begin();
                        javax.persistence.Query q = em.createQuery("UPDATE ChequeDentista U SET U.medico_p=" + Integer.parseInt(cats.get(0).toString()) + " WHERE U.id=" + temp);
                        q.executeUpdate();
                        utx.commit();
                    } catch (Exception ex) {
                        Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                    }

                }
            } else {
                FacesContext context = FacesContext.getCurrentInstance();
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Cheque ja usado",
                        "O cheque ja foi usado!.");
                context.addMessage(null, message);
            }
        } else {
            FacesContext context = FacesContext.getCurrentInstance();
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Dados invalidos",
                    "Os dados nao sao validos!.");
            context.addMessage(null, message);
        }
        return null;
    }

    public void Listar() {
        String myParam = "" + FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get("myAttribute");

        List cats = null;
        tab=null;
        // obter o id do loggin do medico
        try {
            utx.begin();
            javax.persistence.Query q = em.createQuery("SELECT L.id FROM Logging L WHERE L.username='" + myParam + "'");
            cats = q.getResultList();
            utx.commit();
        } catch (Exception ex) {
            Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
        }
        // obter o id do medico
        try {
            utx.begin();
            javax.persistence.Query q = em.createQuery("SELECT L.id FROM Medico L WHERE L.idlog='" + cats.get(0).toString() + "'");
            cats = q.getResultList();
            utx.commit();
        } catch (Exception ex) {
            Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
        }
        int m_id = Integer.parseInt(cats.get(0).toString());

        //listar cheques pendentes
        if (tipo.compareTo("P") == 0) {
            // obter id do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.id FROM ChequeDentista L WHERE L.medico_p=" + m_id + " and L.estadoMedico='PENDENTE'");
                cats = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }

        } //listar cheques emitidos
        else {
            // obter id do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.id FROM ChequeDentista L WHERE L.idmedico=" + m_id);
                cats = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        string = "";
        List id_ut = null;
        List nome_ut = null;
        List id_md = null;
        List nome_md = null;
        List data = null;
        List estado = null;
        List pag = null;
        tab = new tabela[cats.size()];
        for (int x = 0; x < cats.size(); x++) {
            // obter id do utente
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.idutente FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                id_ut = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter nome do utente
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.nome FROM Utente L WHERE L.id=" + id_ut.get(0));
                nome_ut = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter id do medico
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.idmedico FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                id_md = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter nome do medico
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.nome FROM Medico L WHERE L.id=" + id_md.get(0));
                nome_md = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter data de emissao
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.dataEmissao FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                data = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter estado do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.estadoUtente FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                estado = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter estado do pagamento do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.estadoMedico FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                pag = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }

            tab[x] = new tabela(nome_ut.get(0).toString(), nome_md.get(0).toString(), data.get(0).toString(), estado.get(0).toString(), pag.get(0).toString(), "", "");
        }
    }

    public String Listarars() {

        List cats = null;
        tab=null;

        //listar cheques por usar
        if (tipo.compareTo("P") == 0) {
            // obter id do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.id FROM ChequeDentista L WHERE L.estadoUtente='CRIADO'");
                cats = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }

        } //listar cheques usados
        else {
            // obter id do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.id FROM ChequeDentista L WHERE L.estadoUtente='PENDENTE'");
                cats = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        string = "";
        List id_md = null;
        List nome_md = null;
        List nib_md = null;
        List numero_ch = null;
        List data = null;
        List pag = null;
        tab = new tabela[cats.size()];
        for (int x = 0; x < cats.size(); x++) {
            // obter id do medico
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.idmedico FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                id_md = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter nome do medico
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.nome FROM Medico L WHERE L.id=" + id_md.get(0));
                nome_md = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }// obter nome do medico
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.nib FROM Medico L WHERE L.id=" + id_md.get(0));
                nib_md = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter data de emissao
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.dataEmissao FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                data = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter numero do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.numero FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                numero_ch = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // obter estado do pagamento do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.estadoMedico FROM ChequeDentista L WHERE L.id=" + cats.get(x));
                pag = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }

            if (tipo.compareTo("P") == 0) {
                tab[x] = new tabela("", nome_md.get(0).toString(), data.get(0).toString(), "", "", nib_md.get(0).toString(), numero_ch.get(0).toString());
            } else {
                tab[x] = new tabela("", nome_md.get(0).toString(), data.get(0).toString(), "", pag.get(0).toString(), nib_md.get(0).toString(), numero_ch.get(0).toString());
            }
        }
        return null;
    }

    public String Pagar() {

        List cats = null;
        List cats2 = null;
        tab=null;
        if (pag_ch_ars.compareTo("") != 0) {
            //Obter estado de pagamento do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.estadoMedico FROM ChequeDentista L WHERE L.numero=" + Integer.parseInt(pag_ch_ars));
                cats = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            //Obter estado de uso do cheque
            try {
                utx.begin();
                javax.persistence.Query q = em.createQuery("SELECT L.estadoUtente FROM ChequeDentista L WHERE L.numero=" + Integer.parseInt(pag_ch_ars));
                cats2 = q.getResultList();
                utx.commit();
            } catch (Exception ex) {
                Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
            }
            // ver se cheque ja foi usado
            if (cats.size() != 0) {
                // ver se cheque ja foi pago
                if (cats2.get(0).toString().compareTo("PENDENTE") == 0) {


                    if (cats.get(0).toString().compareTo("PENDENTE") == 0) {
                        // fazer update ao estado de pagamento do cheques
                        try {
                            utx.begin();
                            javax.persistence.Query q = em.createQuery("UPDATE ChequeDentista U SET U.estadoMedico='PAGO' WHERE U.numero=" + Integer.parseInt(pag_ch_ars));
                            q.executeUpdate();
                            utx.commit();
                        } catch (Exception ex) {
                            Logger.getLogger(Utentes.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    } else {
                        FacesContext context = FacesContext.getCurrentInstance();
                        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                                "Pagamento Failed4!",
                                "O cheque ja esta pago.");
                        context.addMessage(null, message);
                    }
                } else {
                    FacesContext context = FacesContext.getCurrentInstance();
                    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                            "Pagamento Failed3!",
                            "O cheque ja esta pago.");
                    context.addMessage(null, message);
                }
            } else {
                FacesContext context = FacesContext.getCurrentInstance();
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                        "Pagamento Failed2!",
                        "O numero inserido esta errado.");
                context.addMessage(null, message);
            }
        } else {
            FacesContext context = FacesContext.getCurrentInstance();
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Pagamento Failed1!",
                    "O numero inserido esta errado.");
            context.addMessage(null, message);
        }
        Listarars();
        return null;
    }
}

